# 生成者
#     1.需要单独创建一个任务包,任务包中的py文件必须以 tasks.py作为我们的文件名
#     2.生成者/任务 其本质就是 函数
#     3.这个函数必须要经过 celery的实例对象的task装饰器装饰
#     4.这个任务需要让celery自动检测
# 消息队列
#
# 消费者

#     语法:celery -A proj worker -l info
#     语法:celery -A celery实例对象的文件 worker -l info
#     需要在虚拟环境中执行: celery -A celery_tasks.main
from apps.verifications.constant import YUNTONGXUN_EXPIRE_TIME, YUNTONGXUN_MODEL_1
from libs.yuntongxun.sms import CCP
from celery_tasks.main import app
import logging
logger = logging.getLogger('django')

# (bind=True)表示任务吧自己传过去，这样可以在任务的第一个参数中传递self
# 函数中的self就是TASK任务本身
# default_retry_delay默认重置时间间隔
@app.task(bind = True, default_retry_delay = 5, name = 'send_sms')
def send_sms_code(self,mobile, sms_code):
    try:
        result = CCP().send_template_sms(mobile, [sms_code, YUNTONGXUN_EXPIRE_TIME], YUNTONGXUN_MODEL_1)
        if result !=0:
            raise Exception('下单失败')
    except Exception as exc:
        logger.error(exc)
        # max_retries = 3设置最大的重试次数
        raise self.retry(exc=exc,max_retries=3)
